﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using Telerik.Web.UI;
using System.Collections;
using System.Web.UI.WebControls;
using System.Data;
using System.IO;
using System.Configuration;
using Proxy;
using SIM.Util;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Spreadsheet;
using System.Text.RegularExpressions;
using OpenXMLExcel.SLExcelUtility;
using SIM.Util;

namespace SIM.Geo.UI.Geo
{
    public partial class frmActualizarLey1 : PageBase
    {
        private List<MuestraSondajeImportacion> listaMuestraSondaje = new List<MuestraSondajeImportacion>();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                this.rgLista.ClientSettings.Scrolling.ScrollHeight = int.Parse(System.Configuration.ConfigurationManager.AppSettings["listaPrincipalScrollHeight"]);
                hfFormatosPermitidos.Value = ConfigurationManager.AppSettings["formatoImportarPermitidos"];
                //LaboratoriosListar();
                // lblNavegacion.Text = "Geologia > Ley Muestras";
                this.rgLista.DataSource = listaMuestraSondaje;
                this.rgLista.DataBind();
                this.ibtnImportar.Visible = false;
            }
        }


        #region Mensajes


        protected override void MostrarMensaje(string mensaje, enmTipoMensajeMostrar tipoMensaje = enmTipoMensajeMostrar.Informativa)
        {
            this.pnlMensaje.Visible = true;
            this.lblMensaje.Text = mensaje;
            this.pnlMensaje.CssClass = this.ObtenerEstiloMensaje(tipoMensaje);
        }

        protected override void OcultarMensaje()
        {
            this.pnlMensaje.Visible = false;
            this.lblMensaje.Text = string.Empty;
        }

        #endregion

        protected void ibtnImportar_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.rgLista.Items.Count == 0)
                {
                    MostrarMensaje("No ha cargado archivo de muestras.", enmTipoMensajeMostrar.Error);
                    return;
                }

                List<MuestraSondaje> listaMuestraSondaje = new List<MuestraSondaje>();
                MuestraSondaje muestraSondaje = null;
                foreach (GridDataItem item in this.rgLista.Items)
                {
                    muestraSondaje = new MuestraSondaje();
                    muestraSondaje.CodigoMuestraSondaje = item.GetDataKeyValue("CodigoMuestraSondaje").ToString();
                    muestraSondaje.ValorAg = float.Parse(item.GetDataKeyValue("ValorAg").ToString());
                    muestraSondaje.ValorPb = float.Parse(item.GetDataKeyValue("ValorPb").ToString());
                    muestraSondaje.ValorZn = float.Parse(item.GetDataKeyValue("ValorZn").ToString());
                    muestraSondaje.ValorCu = float.Parse(item.GetDataKeyValue("ValorCu").ToString());
                    muestraSondaje.ObservacionLey = this.txtObservacion.Text;
                    listaMuestraSondaje.Add(muestraSondaje);
                }

                using (SEMuestraSondajeClient proxy = new SEMuestraSondajeClient("BasicHttpBinding_ISEMuestraSondaje"))
                {
                    proxy.ActualizarLeyMuestra(listaMuestraSondaje.ToArray());
                }

                this.ibtnImportar.Visible = false;
                this.MostrarMensaje("El proceso de importación de Leyes de muestras ha finalizado exitosamente.");
            }
            catch (Exception ex)
            {

                Logger.Error("frmActualizarLey1:ibtnImportar_Click", ex);
            }
        }

        protected void ibtnMostrarArchivo_Click(object sender, EventArgs e)
        {
            if (rblLaboratorios.SelectedItem == null)
            {
                MostrarMensaje("Debe seleccionar Laboratorio Interno / Externo.", enmTipoMensajeMostrar.Error);
                return;
            }

            this.pnlMensaje.Visible = false;
            if (rblLaboratorios.SelectedItem.Text == "Laboratorio Interno")
            {
                //importar desde laboratorio
            }
            else if (rblLaboratorios.SelectedItem.Text == "Laboratorio Externo")
            {
                ImportarExterno();
            }
        }

        /// <summary>
        /// Metodo que importa archivo de Excel
        /// </summary>
        private void ImportarExterno()
        {
            #region Importacion

            if (hfFormatoValidado.Value == "0")
            {
                this.MostrarMensaje("Seleccione un archivo con el formato correcto.", enmTipoMensajeMostrar.Error);
                return;
            }

            if (!fuLaboratorio.HasFile)
            {
                MostrarMensaje("Seleccione un archivo para la carga.", enmTipoMensajeMostrar.Error);
                return;
            }


            if (fuLaboratorio.HasFile)
            {
                FileInfo fiMuestra = new FileInfo(fuLaboratorio.FileName);
                //if (fiMuestra.Extension

                string root = Server.MapPath(ConfigurationManager.AppSettings["rutaArchivosLeyes"]) + fuLaboratorio.FileName;


                if (File.Exists(root))
                    File.Delete(root);

                try
                {

                    fuLaboratorio.SaveAs(root);

                    //SimExcelReader excel = new SimExcelReader();
                    SLExcelReader excel = new SLExcelReader();

                    List<MuestraSondajeImportacion> imports = excel.CargarLeyes(root);
                    if (imports == null)
                    {
                        this.MostrarMensaje("No se ha encontrado ninguna muestra.", enmTipoMensajeMostrar.Error);
                        return;
                    }
                    excel = null;


                    //Validación
                    List<MuestraSondajeImportacion> resultado;
                    using (SEMuestraSondajeClient proxy = new SEMuestraSondajeClient("BasicHttpBinding_ISEMuestraSondaje"))
                    {
                        resultado = proxy.ValidarLeyMuestra(imports.ToArray()).ToList();
                    }

                    var inconsistentes = resultado.Where(x => x.Validacion.CompareTo("Correcto") != 0).ToList();
                    if (inconsistentes.Count > 0)
                    {
                        MostrarMensaje("Se han encontrado información inconsistente de leyes.", enmTipoMensajeMostrar.Error);
                        this.ibtnImportar.Visible = false;
                        this.txtObservacion.Text = string.Empty;
                        this.txtObservacion.Enabled = false;
                    }
                    else
                    {
                        this.ibtnImportar.Visible = true;
                        this.txtObservacion.Enabled = true;
                    }

                    this.rgLista.DataSource = resultado;
                    this.rgLista.DataBind();


                    if (System.IO.File.Exists(root))
                        System.IO.File.Delete(root);


                }
                catch (Exception ex)
                {
                    if (System.IO.File.Exists(root))
                        System.IO.File.Delete(root);
                    MostrarMensaje(MSG_ERROR_GENERICO, enmTipoMensajeMostrar.Error);
                    Logger.Error("frmActualizarLey1:ImportarExterno", ex);
                }

            }
        }

            #endregion


    }
}